package com.css.listener;

import com.css.entity.KeyBorderCode;
import javafx.scene.input.KeyCode;
import lombok.Getter;

import java.util.HashMap;
import java.util.Map;

public enum MyKeyCode {
    ESCAPE("Esc", 27),
    F1("F1", 112),
    F2("F2", 113),
    F3("F3", 114),
    F4("F4", 115),
    F5("F5", 116),
    F6("F6", 117),
    F7("F7", 118),
    F8("F8", 119),
    F9("F9", 120),
    F10("F10", 121),
    F11("F11", 122),
    F12("F12", 123),
    ENTER("ENTER", 13),
    TAB("Tab", 9),
    CAPS("Caps Lock", 20),
    SHIFT("Shift", 160),
    CONTROL("Ctrl", 162),
    ALT("Alt", 164),
    WINDOWS("WINDOWS", 91),
    ALT_GRAPH("Alt Graph", 165),
    CONTEXT_MENU("", 93),
    BACK_SPACE("Backspace", 8),
    PRINTSCREEN("Print Screen", 44),
    INSERT("Insert", 45),
    DELETE("Delete", 46),
    SCROLL_LOCK("Scroll Lock", 145),
    HOME("Home", 36),
    END("End", 35),
    PAUSE("", 19),
    PAGE_UP("", 33),
    PAGE_DOWN("", 34),
    LEFT("", 37),
    UP("", 38),
    RIGHT("", 39),
    DOWN("", 40),
    NUM_LOCK("Num Lock", 144),

    //css//数字`
    BACK_QUOTE("Back Quote", 192),
    DIGIT1("Back Quote", 49),
    DIGIT2("Back Quote", 50),
    DIGIT3("Back Quote", 51),
    DIGIT4("Back Quote", 52),
    DIGIT5("Back Quote", 53),
    DIGIT6("Back Quote", 54),
    DIGIT7("Back Quote", 55),
    DIGIT8("Back Quote", 56),
    DIGIT9("Back Quote", 57),
    DIGIT0("Back Quote", 48),
    MINUS("Back Quote", 189),
    EQUALS("Back Quote", 187),

    //    数字 NUMPAD0
    NUMPAD0("NUMPAD0", 96),
    NUMPAD1("NUMPAD0", 97),
    NUMPAD2("NUMPAD0", 98),
    NUMPAD3("NUMPAD0", 99),
    NUMPAD4("NUMPAD0", 100),
    NUMPAD5("NUMPAD0", 101),
    NUMPAD6("NUMPAD0", 102),
    NUMPAD7("NUMPAD0", 103),
    NUMPAD8("NUMPAD0", 104),
    NUMPAD9("NUMPAD0", 105),
    DECIMAL("DECIMAL", 110),
    ADD("ADD", 107),
    SUBTRACT("SUBTRACT", 109),
    MULTIPLY("DECIMAL", 106),
    DIVIDE("DECIMAL", 111),

    //     符号  {}|
    OPEN_BRACKET("", 219),
    CLOSE_BRACKET("", 221),
    BACK_SLASH("", 220),

    //    :"
    SEMICOLON("", 186),
    QUOTE("", 222),
    //<>?
    COMMA("", 188),
    PERIOD("", 190),
    SLASH("", 191),
    //    字母
    A("A", 65),
    B("B", 66),
    C("C", 67),
    D("D", 68),
    E("E", 69),
    F("F", 70),
    G("G", 71),
    H("H", 72),
    I("I", 73),
    J("J", 74),
    K("K", 75),
    L("L", 76),
    M("M", 77),
    N("N", 78),
    O("O", 79),
    P("P", 80),
    Q("Q", 81),
    R("R", 82),
    S("S", 83),
    T("T", 84),
    U("U", 85),
    V("V", 86),
    W("W", 87),
    X("X", 88),
    Y("Y", 89),
    Z("Z", 90),
    ;


    @Getter
    final String name;
    public final int vkCode;

    MyKeyCode(String name, int vkCode) {
        this.name = name;
        this.vkCode = vkCode;
    }

    public final int getVkCode() {
        return vkCode;
    }


    private static final Map<Integer, MyKeyCode> nameMap;
    static {
        nameMap = new HashMap<Integer, MyKeyCode>(KeyCode.values().length);
        for (MyKeyCode c : MyKeyCode.values()) {
            nameMap.put(c.vkCode, c);
        }
    }

    public static MyKeyCode getKeyCode(Integer vkCode) {
        return nameMap.get(vkCode);
    }
}
